Proyecto: El Desafío de Don Rene

MDS7202: Laboratorio de Programación Científica para Ciencia de Datos

Cuerpo Docente:

Proyecto

Equipo:

Imports

1. Introducción

El objetivo de este proyecto consiste en lograr predecir correctamente 2 atributos que tiene un videojuego posteriormente a su lanzamiento, su número de ventas y las valoraciones de los usuarios. Se intentan predecir estos atributos ya que son importantes a la hora de decidir si conviene invertir en el juego, son, en el fondo, una buena medida del éxito del juego. Hay que precisar que se tiene que hacer una clasificación en 5 clases en las valoraciones de los usuarios y una regresión en el caso del número de ventas.

Los datos que proveen es un dataset con 7881 ejemplos que describen información respecto del videojuego, sus categorías, género, publicador, descripciones, etc. Son 14 atributos y 2 variables objetivos , la primera las ventas estimadas y la segunda 5 categorías del rating que le dieron los usuarios al juego.

La primera tarea se evalua en base a la métrica r2 ya que esta permite medir el coeficiente de correlación entre los valores predichos y los reales que tiene la ventaja de poder expresarse entre 0(correlación nula) y 1(correlación perfecta) y es bastante intuitivo.

La segunda tarea se evalua en base a la métrica f1-score debido a que es una relación armónica entre precision y recall y por ende evita que se elijan clasficadores que maximicen solo 1 de estas métricas. Además f1-score es la métrica de facto para tareas de clasificación.

Nuestra propuesta para resolver el problema consistieron en modelo basado en RandomForest en el caso del clasificador, esto debido a la excelencia de RandomForest para clasificar en casos generales, además de su rapidez. En el caso del regresor se utilizó XGBoost ya que se quería probar con algo nuevo y debido a que en Internet se describía XGBoost como un modelo que ensamblaba varios y que no requería mucha optimización ni conocimiento específico del problema.

Nuestro modelo de clasificación cumplió las expectativas, haciendolo bastante bien. En cambio, nuestro modelo regresor no funcionó tan bien como habriamos esperado, teniendo resultados menores a los de varios participantes pero igual quedando por encima del Baseline del curso.


2. Análisis Exploratorio de Datos

Describe

Se puede notar que hay 7881 juegos, de los cuales la gran mayoría esta en ingles por lo que esta variable podría no ser muy relevante. Además que todos los juegos se pueden jugar desde los 18 y la mayoría de los juegos no necesita una edad para poder ser jugado. Se puede notar tambien que los precios en general no son muy caros, teniendo en cuenta que la media es de 8 dolares pero que hay algunos que se escapan de esto teniendo precios tan altos como 79 dolares. Respecto a la cantidad de ventas se puede ver que existe una alta desviación estandar lo que podría estar asociado a que a la mayoría de los juegos les va a ir mas o menos mediocre mientras que algunos juegos tendrán un alto éxito lo que puede dificultar esta clasificación.

Por último, respecto al rating se puede encontar que en general las clases parecieran estar bastante balanceadas teniendo en cuenta los valores de los cuartiles.

También es relevante notar que no hay duplicados.

Correlations

Respecto al número de ventas, se puede notar que no hay una correlación muy notoria entre las variables númericas, pero si hay algunas variables que parecieran estar más vinculadas con la cantidad de ventas, por ejemplo la edad requerida (juegos con edades requeridas menores pueden ser menos atractivos) y tiempo de juego, a mayor tiempo de juego mayor debe ser el desarrollo del juego y por ende puede ser más atractivo.

Respecto al rating se puede notar que casi no hyn ninguna correlación pero las que tienen una correlación positiva más importante es el precio y el número de ventas.

Histogramas variables categóricas

Se puede notar que tanto quien publica como quien desarrolla el juego tienen una alta vinculación con la cantidad de ventas asociadas por la reputación que tienen, su publicidad, etc. Se puede observar que estos datos serán muy importantes para poder lograr buenos modelos. Para poder vectorizar tanto developer como publisher en la regresión podría ser importante tomar en cuenta cuantos juegos tiene cada uno de estos en vez de un onehotencode simple.

Se puede ver también que la relación con los ratings no es tan extrema como con las ventas, pero igualmente existe esta vinculación.

Histogramas variables númericas mas relevantes

Podemos notar que historical sells tiene una gran cantidad de outliers al igual que average playtime y por ende deben eliminarse varios de estos outliers para que puedan servirle los datos a un clasificador. En cambio rating pareciera tener algo cercano a una distribución uniforme, con pequeñas diferencias que lo podrían acercar a una normal.

En cuanto a average playtime tambien existe una cantidad de outliers grande pero que tal vez se podrían agrupar, mientras que price tiene una distribución no representable por una normal pero sin muchos outliers.

El caso de required age es más extraño porque la mayoria de los juegos no tienen edad, sin embargo, los juegos que si tienen edad son muy relevantes en cuanto a número de ventas como se puede saber por las correlaciones.

Histogramas variables númericas mas relevantes (Estimated sells)

Se puede notar una correlación clara entre las ventas y los juegos que son +18, incluso teniendo en cuenta que muy pocos juegos son +18, lo que es interesantisimo porque significa que se hacen muchos juegos sin limite de edad cuando los juegos con limite de edad tienen más ventas. Las segunda correlación del average playtime también es notoria pero menos que la anterior y por último la del precio no es muy distinguible.

Es díficil notar alguna correlación muy directa, pero si podemos ver que a mayor precio mayor en general estan los promedios más altos.

Proyeccion 2-D

Al proyectar en 2D para el caso de las ventas estimadas no se puede encontrar ninguna relación ya que los outliers no nos dejan hacer diferenciación del color.

En cambio en el caso de los ratings, al proyectar en 2D encontramos que solo las columnas númericas no nos permiten hacer la separación clara entre clusters de manera exitosa, ya que cada cluster contiene varias de las categorías sin una separacion clara. Solo se puede determinr facilmente un par de clusters que son mayoritariamente negative y otros que son mayotitariamente very positive.


3. Preparación de Datos

Para preparar nuestros datos, no eliminaremos duplicados debido a que no existen, y respecto a los outliers eliminaremos outliers solo para el caso de la cantidad de ventas ya que efectivamente hay juegos que tienen demasiadas ventas en comparación a otros y eliminar estos outliers nos da un número de ventas con una desviación estandar no tan alta.

Después, hacemos la exploración de datos denuevo teniendo en cuenta los outliers expulsados:

Se puede notar que efectivamente mejora en cuantía la visualización en 2d de los clusters (sobre todo en la regresión) y que además ahora los histogramas tienen mas sentido.

Luego, preparamos un ColumnTransformer que prepara los datos:


4. Baseline

Adjuntamos las transformaciones anteriores en un solo Pipeline y agregamos al final un clasificador sencillo ClasificadorX

Results testing baseline - Rating

Results testing baseline - Estimted sells


5. Optimización del Modelo

Ahora, agregamos selección y/o reducción de atributos y probaremos una combinación de diferentes parámetros para mejorar nuestro modelo:

Nota: Procuren hacer Gridsearch sobre espacios de búsqueda razonables. Es decir, no estén 3 días buscando la mejor configuración...

Eliminaremos de las caracteristicas que enviamos el tfidif de las descripciones, el platform y si se juega en ingles o no porque no creemos que aporten información relevante

Pudimos ver que mejor modelo mejora los resultados obtenidos en el baseline.


6. Conclusiones

Se pudo resolver el problema bastante bien superando nuesto propio baseline optimizando sus parametros y que deberiamos usar como input.

El baseline mejoró bastante, pasando de un f1 de 0.295 y un r2 de 0.182 en el dataset de test evaluado en codelab, a un f1 de 0.35 y un r2 de 0.18 despues de las optimizaciones. La verdad yo quede bastante conforme con los resultados, siempre se puede mejorar más aun pero este fue un resultado satisfactorio.

A mi parecer es un problema complejo pero si se me ocurren algunas maneras de modelar mejor el problema, como tratar de usar el texto libre de las descripciones utilizando NLP, contar el número de juegos de cada publicador y de cada developer y ver si eso ayudaba a la clasificación y la regresión.

Siguiendo un poco los resultados obtenidos en Codelab, me doy cuenta que me fue mejor en clasificación que en regresión y esto lo asocio a mi experiencia, ya que siempre he tenido que hacer clasificaciones y no regresiones y por ende no sabia bien que modelo utilizar. Utilice XGBoost porque en internet salia que ultimamento habia logrado excelentes resultados en data tabular, pero al no conocerlo bien tampoco se a la perfección como hacerle el finetuning.

El proyecto me gustó bastante y la dinamica de la competencia es una que ayuda a poder evaluar los resultados que esta teniendo en comparación al resto lo que ayuda bastante para presionarse. En general me gusto bastante y apreció la idea. Lo que me habria gustado haber aprendido es un poco mas sobre regresiones en el curso en general, porque siempre casi todo machine learning lo enfocan exclusivamente en clasificación.



Anexo: Generación de Archivo Submit de la Competencia

Para subir los resultados obtenidos a la pagina de CodaLab utilice la función generateFiles entregada mas abajo. Esto es debido a que usted deberá generar archivos que respeten extrictamente el formato de CodaLab, de lo contario los resultados no se veran reflejados en la pagina de la competencia.

Para los resultados obtenidos en su modelo de clasificación y regresión, estos serán guardados en un archivo zip que contenga los archivos predicctions_clf.txt para la clasificación y predicctions_rgr.clf para la regresión. Los resultados, como se comento antes, deberan ser obtenidos en base al dataset test.pickle y en cada una de las lineas deberan presentar las predicciones realizadas.

Ejemplos de archivos:

Created in deepnote.com Created in Deepnote